home *** CD-ROM | disk | FTP | other *** search
-
-
- DCF77: Wie man den Status des Empfangsprogramms erfahren kann
- ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
-
-
- Damit andere Programme ermitteln können, ob DCF77 die Systemzeit
- erfolgreich eingestellt hat, besitzt das Programm eine Datenstruktur, die
- eine öffentliche SignalSemaphore zur Regelung des Zugriffs enthält.
-
- Zum Zugriff auf die Struktur gelten die Regeln für die Benutzung von
- Public Shared SignalSemaphoren. Es sollte nur lesend zugegriffen werden.
-
- Die Semaphore ist unter dem Namen "DCF77 State" zu finden.
-
-
- struct DCF77StateList
- {
- struct SignalSemaphore sl_Semaphore; // die Semaphore "DCF77 State"
- STRPTR version; // Zeiger auf die Version von DCF77 (z.B. "1.74")
- BOOL Received; // FALSE: keine DCF77-Zeit | TRUE: Systemzeit gestellt.
-
- // Die nachfolgenden Werte existieren erst ab DCF77 Version 2.18:
- LONG ReceiverState; // 0 - kein Signal. 1 - Empfang gestört.
- // 2 - Warte auf Synchronisation. 3 - Empfang läuft.
- // 4 - Programm inaktiv
- LONG TimeLeft; // voraussichtl. Dauer [s] bis zum nächsten Stellen
- // der Zeit
- LONG LastError; // noch nicht implementiert (z.Z. immer Null)
- };
-
-
- Als Beispiel zur Benutzung der Struktur finden Sie in diesem Verzeichnis
- die Sourcecodes der Hilfsprogramme WaitForDCF77 und WaitDCF77ifCrash.
-
- Bei der Weiterentwicklung des Programms ist eine Ergänzung der Struktur
- um weitere Angaben möglich.
-
- Genaueres über Semaphoren finden Sie ab Seite 509 in
-
- Amiga ROM Kernel Reference Manual: Libraries, Third Edition
- Addison-Wesley Publishing Company, Inc. 1992
- ISBN 0-201-56774-1
-
-
- Wenn die Versionsnummer von DCF77 abgefragt werden soll, kann das z.B.
- auf folgende Weise geschehen:
-
- struct DCF77StateList *DCF77PublicState;
- UBYTE *DCF77SemaphoreName="DCF77 State";
- LONG DCFVersion, DCFRevision, Characters;
-
- Forbid();
- if(DCF77PublicState=(struct DCF77StateList *) FindSemaphore(DCF77SemaphoreName))
- {
- ObtainSemaphoreShared((struct SignalSemaphore *) DCF77PublicState);
-
- // Jetzt kann auf die bis Version 2.17 vorhandenen Werte zugegriffen
- // werden...
-
- Characters=StrToLong(DCF77PublicState->Version,&DCFVersion);
- Characters=StrToLong(DCF77PublicState->Version+Characters+1,&DCFRevision);
- if(DCFVersion>2 || DCFVersion==2 && DCFRevision>=18)
- {
- // ...und jetzt auf die ab Version 2.18 vorhandenen Werte.
- }
- ReleaseSemaphore((struct SignalSemaphore *) DCF77PublicState);
- }
- else
- {
- // DCF77 läuft nicht
- }
- Permit();
-
-
- Wie Sie sehen, müssen Zugriffe auf eine Semaphore mit Forbid()/Permit()
- abgesichert werden. Um das Systemverhalten nicht zu beeinträchtigen,
- sollten Sie diesen Vorgang möglichst kurz gestalten; am besten kopieren
- Sie benötigte Werte in Hilfsvariablen und werten sie erst nach dem
- Permit() aus.
-
- Inzwischen deutet sich an, daß bei zukünftigen Versionen des Amiga-OS der
- Mechanismus des Semaphoren-Zugriffs vollkommen geändert werden wird (die
- Forbid/Permit-Benutzung ist dann wahrscheinlich generell nicht mehr
- zulässig). Diese Änderungen sind wohl bei der Anpassung an den PowerPC-Chip
- unvermeidlich. Das könnte zur Folge haben, daß die DCF77-Programme in der
- jetzigen Form nicht mehr arbeitsfähig sind. Rechnen Sie also mit dem
- Erscheinen neuer Betriebssystemfunktionen für Semaphoren und einem
- notwendigen Update der DCF77-Software.
- Die oben beschriebene Datenstruktur wird sich aber nicht ändern, sofern
- das nicht unvermeidlich ist.
-
-